/**
 * 弹窗状态管理组合式函数
 * 提供统一的弹窗状态管理和操作方法
 */

import { ref, computed } from 'vue'
import type { DialogState } from '../types/agent'
import { DialogType } from '../types/agent'

/**
 * 弹窗管理Hook
 * @returns 返回弹窗相关的响应式数据和操作方法
 */
export function useDialog() {
  /** 弹窗状态响应式数据 */
  const dialogState = ref<DialogState>({
    type: null,
    visible: false,
    data: null
  })
  
  /** 当前弹窗类型 */
  const currentDialogType = computed(() => dialogState.value.type)
  
  /** 弹窗是否可见 */
  const isDialogVisible = computed(() => dialogState.value.visible)
  
  /** 弹窗相关数据 */
  const dialogData = computed(() => dialogState.value.data)
  
  /** 是否为注册弹窗 */
  const isRegisterDialog = computed(() => 
    dialogState.value.type === 'register' && dialogState.value.visible
  )
  
  /** 是否为删除确认弹窗 */
  const isDeleteConfirmDialog = computed(() => 
    dialogState.value.type === 'deleteConfirm' && dialogState.value.visible
  )
  
  /**
   * 打开弹窗
   * @param type 弹窗类型
   * @param data 弹窗相关数据（可选）
   */
  function openDialog(type: DialogType, data?: any) {
    dialogState.value = {
      type,
      visible: true,
      data: data || null
    }
  }
  
  /**
   * 关闭弹窗
   */
  function closeDialog() {
    dialogState.value = {
      type: null,
      visible: false,
      data: null
    }
  }
  
  /**
   * 打开注册弹窗
   */
  function openRegisterDialog() {
    openDialog(DialogType.REGISTER)
  }
  
  /**
   * 打开删除确认弹窗
   * @param agentData 要删除的智能体数据
   */
  function openDeleteConfirmDialog(agentData: any) {
    openDialog(DialogType.DELETE_CONFIRM, agentData)
  }
  
  /**
   * 切换弹窗状态
   * @param type 弹窗类型
   * @param data 弹窗相关数据（可选）
   */
  function toggleDialog(type: DialogType, data?: any) {
    if (dialogState.value.visible && dialogState.value.type === type) {
      closeDialog()
    } else {
      openDialog(type, data)
    }
  }
  
  /**
   * 检查指定类型的弹窗是否打开
   * @param type 弹窗类型
   * @returns 返回是否打开
   */
  function isDialogOpen(type: DialogType): boolean {
    return dialogState.value.visible && dialogState.value.type === type
  }
  
  /**
   * 重置弹窗状态
   */
  function resetDialog() {
    dialogState.value = {
      type: null,
      visible: false,
      data: null
    }
  }
  
  /** 注册弹窗可写计算属性 */
  const registerDialogVisible = computed({
    get: () => dialogState.value.type === 'register' && dialogState.value.visible,
    set: (value: boolean) => {
      if (value) {
        openRegisterDialog()
      } else {
        closeDialog()
      }
    }
  })
  
  /** 删除确认弹窗可写计算属性 */
  const deleteDialogVisible = computed({
    get: () => dialogState.value.type === 'deleteConfirm' && dialogState.value.visible,
    set: (value: boolean) => {
      if (value) {
        // 删除弹窗需要数据，这里不直接打开
        console.warn('删除弹窗需要通过openDeleteConfirmDialog方法打开')
      } else {
        closeDialog()
      }
    }
  })

  return {
    // 响应式数据
    dialogState,
    
    // 计算属性
    currentDialogType,
    isDialogVisible,
    dialogData,
    isRegisterDialog,
    isDeleteConfirmDialog,
    
    // 可写计算属性（用于v-model）
    registerDialogVisible,
    deleteDialogVisible,
    
    // 操作方法
    openDialog,
    closeDialog,
    openRegisterDialog,
    openDeleteConfirmDialog,
    toggleDialog,
    isDialogOpen,
    resetDialog
  }
}